/*—————————————————————————————————————————————————————————— table组件ts接口 ——————————————————————————————————————————————————————————*/

import type { ColumnsType } from 'antd/es/table'
import type { ExpandedRowRender } from 'rc-table/lib/interface.d.ts'
import type { PaginationProps } from 'antd'
import {styleAndCss} from '@/utils/interface'
import { RowSelectMethod } from 'antd/es/table/interface'

// 分页器对应配置
type Pagination = {
  type?: Array<'showSizeChanger' | 'showQuickJumper' | 'showTotal'> // 分页器展示类型
  postion?: 'Left' | 'Center' | 'Right' // 分页器展示位置
  pageSizeOptions?: string[] | number[] // 指定每页可以显示多少条
}

// 所需函数类型
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
type SelectionChange = (selectedRowKeys: React.Key[], selectedRows: unknown[], info: {
  type: RowSelectMethod;
})=> void // 项目筛选变化时

// 整体传参
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
interface TablesProps extends styleAndCss {
  bordered?:boolean // 是否展示外边框和列边框	
  isDrag?:boolean // 是否开启拖拽
  itemUniqueIdentification  ?: string // 成员唯一标识选取字段名称
  head: ColumnsType<unknown> // 表格头部数组
  scrollToFirstRowOnChange?: boolean // 当分页、排序、筛选变化后是否滚动到表格顶部
  scrollX?: string | number | true // 设置横向滚动，也可用于指定滚动区域的宽，可以设置为像素值，百分比，true 和 'max-content'
  scrollY?: string | number // 设置纵向滚动，也可用于指定滚动区域的高，可以设置为像素值
  rowChangeType?: 'checkbox' | 'radio' | 'none' // 多选，单选，或者不需要选择
  selectedList?: React.Key[] // 开启多选或单选后，需要默认选中的成员列表
  pagination?: Pagination // 分页器配置
  paginationShow?: boolean // 是否展示分页器
  paginationDisabled?: boolean // 是否禁用分页器
  api?: string // 接口请求地址
  apiQuery?: Object // 接口请求额外参数

  // 方法区域
  // -------------------------------------------------------------------------------------------
  // 额外的展开行配置方法(即怎么渲染展开区域成员)
  expandedRowRender?: ExpandedRowRender<unknown>

  // 设置是否允许行展开(即过滤是否要展开的成员内容)
  rowExpandable?: (record: unknown) => boolean

  // 单选或多选时，成员选择回调函数
  rowSelectionChange?:(coordinateList:Array<React.Key>,selected:Array<unknown>)=> void

  // 分页器组件内容发生改变方法
  paginationChange?: (page: number, pageSize: number) => void

  // 成员拖拽改变函数
  dragChange?:(changeList:Array<unknown>,oldList:Array<unknown>,activeIndex?:number, overIndex?:number)=>void
}

// 表格组件ref访问限定内容
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
interface TableRef {
  data: Array<Object> // 内容数组
  modifyData: (newData: Object[]) => void // 修改当前内容数组

  selectedRowKeys: React.Key[] // 当前选中内容组合数组
  modifySelectedRowKeys: (newSelected: React.Key[]) => void // 修改选择内容数组

  loading: boolean // 当前是否在加载内容
  modifyLoading: (state: boolean) => void // 修改loading状态

  // 分页器部分
  // -------------------------------------------------------------------------------------------
  total: number // 总条数
  PageCount: number // 总页数
  current: number // 当前页数
  modifyCurrent: (newCurrent: number) => void // 修改当前页数
  pageSize: number // 每页条数
  currentPageSize: (newPageSize: number) => void // 修改当前每页条数

  // 中立方法
  // -------------------------------------------------------------------------------------------
  refresh: Function // 刷新函数，用于主动刷新当前表格数据
}

// 拖拽成员接口
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
interface RowProps extends React.HTMLAttributes<HTMLTableRowElement> {
  'data-row-key': string;
}

// 表格成员渲染数组类型
export type { ColumnsType, TablesProps, PaginationProps, TableRef,SelectionChange,RowProps }
